using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Xml;

using Gtk;
using Mono.Cecil;
using MonoDevelop.Components.Commands;
using MonoDevelop.Core;
using MonoDevelop.Core.Gui.Dialogs;
using MonoDevelop.Projects;
using MonoDevelop.Projects.CodeGeneration;
using MonoDevelop.Projects.Parser;
using MonoDevelop.Projects.Text;
using MonoDevelop.Ide.Gui;
using MonoDevelop.Ide.Gui.Pads;
using MonoDevelop.Ide.Gui.Content;
using MonoDevelop.Ide.Tasks;



namespace MonoDevelop.SmokeyAddin
{
        internal class Violation {
                private string cause, description, fix;
                private List<Location> locations;
                private Severity severity;
                                
                public string Cause {
                        get { return this.cause; }
                        set { this.cause = value; }
                }
                
                public string Description {
                        get { return this.description; }
                        set { this.description = value; }
                }
                
                public string Fix {
                        get { return this.fix; }
                        set { this.fix = value; }
                }
                
                public IList<Location> Locations {
                        get { return this.locations; }
                }
                
                public Severity Severity {
                        get { return this.severity; }
                        set { this.severity = value; }
                }
                
                public Violation ()
                {
                        this.locations = new List<Location> ();
                }
                
                public Violation (string cause, string description, string fix, Severity severity)
                {
                        this.cause = cause;
                        this.description = description;
                        this.fix = fix;
                        this.locations = new List<Location> ();
                        this.severity = severity;
                }
         }
         
         internal struct Location {
                private string file_name;
                private int line;
                private int column;

                public string FileName {
                        get { return this.file_name; }
                        set { this.file_name = value; }
                }
                
                public int Line {
                        get { return this.line; }
                        set { this.line = value; }
                }
                
                public int Column {
                        get { return this.column; }
                        set { this.column = value; }
                }

                public Location (string fileName, int line, int column)
                {
                        this.file_name = fileName;
                        this.line = line;
                        this.column = column;
                }
        }        
                
        internal enum Severity {
                Error,
                Warning,
                Nitpick
        }

}
